package handler

import (
	"fitness/go-admin/internal/model"
	"fitness/go-admin/internal/service"
	"fitness/go-admin/pkg/response"

	"github.com/gin-gonic/gin"
)

// ChatStatisticsHandler 客服统计处理器
type ChatStatisticsHandler struct {
	service service.ChatStatisticsService
}

// NewChatStatisticsHandler 创建客服统计处理器
func NewChatStatisticsHandler(service service.ChatStatisticsService) *ChatStatisticsHandler {
	return &ChatStatisticsHandler{
		service: service,
	}
}

// GetStaffStatistics 获取客服工作量统计
// @Summary 获取客服工作量统计
// @Description 统计客服的工作量，包括会话数、响应时间、评分等
// @Tags 客服系统-统计
// @Accept json
// @Produce json
// @Security Bearer
// @Param staffId query int true "客服ID"
// @Param startDate query string true "开始日期 (YYYY-MM-DD)"
// @Param endDate query string true "结束日期 (YYYY-MM-DD)"
// @Success 200 {object} response.Response{data=model.StaffStatisticsResp}
// @Router /api/v1/chat/staff/statistics [get]
func (h *ChatStatisticsHandler) GetStaffStatistics(c *gin.Context) {
	var req model.StaffStatisticsReq
	if err := c.ShouldBindQuery(&req); err != nil {
		response.Error(c, 400, "参数错误: "+err.Error())
		return
	}

	// 权限验证：只能查看自己的统计，或者管理员可以查看所有人的
	currentUserID := c.GetUint("userID")
	userRole := c.GetString("role")
	
	if req.StaffID != currentUserID && userRole != "ADMIN" {
		response.Error(c, 403, "无权查看该客服的统计数据")
		return
	}

	result, err := h.service.GetStaffStatistics(&req)
	if err != nil {
		response.Error(c, 400, err.Error())
		return
	}

	response.Success(c, result, "")
}

